package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import malagaAcoge.model.entities.Atencionprimaria;
import malagaAcoge.utils.JPAUtils;

public class AtencionPrimariaDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public AtencionPrimariaDao() {
		jpaUtils = new JPAUtils();

	}

	@SuppressWarnings("unchecked")
	public static List<Atencionprimaria> findAll() {
		List<Atencionprimaria> atencionprimarias = new ArrayList<Atencionprimaria>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em.createQuery("select u from Atencionprimaria u order by u.fecha desc");
			atencionprimarias = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("No hay atenciones primarias.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findAllAtencionprimaria");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return atencionprimarias;

	}

	public static Atencionprimaria findAtencionprimaria(int id) {
		Atencionprimaria atencionprimaria = null;
		try {
			em = jpaUtils.getEntityManager();
			atencionprimaria = (Atencionprimaria) em.find(
					Atencionprimaria.class, id);
		} catch (Exception e) {
			System.out.println("Error en metodo findAtencionprimaria");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return atencionprimaria;

	}

	public static void createAtencionprimaria(Atencionprimaria atencionPrimaria) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(atencionPrimaria);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createAtencionprimaria:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updateAtencionprimaria(Atencionprimaria atencionPrimaria) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(atencionPrimaria);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo updateAtencionprimaria:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteAtencionprimaria(int idAtencionprimaria) {
		try {
			em = jpaUtils.getEntityManager();
			Atencionprimaria atencionPrimaria = em.find(Atencionprimaria.class,
					idAtencionprimaria);
			if (atencionPrimaria != null) {
				em.getTransaction().begin();
				em.remove(atencionPrimaria);
				em.getTransaction().commit();
			}
		} catch (Exception e) {
			System.out.println("Error en metodo deleteAtencionprimaria:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void mergeAtencionprimaria(Atencionprimaria atencionPrimaria) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(atencionPrimaria);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo updateAtencionprimaria:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	@SuppressWarnings("unchecked")
	public static List<Atencionprimaria> findAtencionesDeDepartamento(
			int idDepartamento) {
		List<Atencionprimaria> atencionprimarias = new ArrayList<Atencionprimaria>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"select OBJECT(Atencionprimaria) from Atencionprimaria atencionprimaria"
									+ " where atencionprimaria.tecnicoBean.departamentoBean.idDepartamento = :valor")
					.setParameter("valor", idDepartamento);
			atencionprimarias = q.getResultList();
		} catch (Exception e) {
			System.out.println("Error en metodo findAllAtencionprimaria");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return atencionprimarias;

	}
}
